# -*- coding: utf-8 -*-

from zinx.ziface.imessage import IMessage
from abc import ABC, abstractmethod


class IDataPack(ABC):
    """
    封包数据和拆包数据
    直接面向TCP连接中的数据流,为传输数据添加头部信息，用于处理TCP粘包问题。
    """
    @abstractmethod
    def GetHeadLen(self) -> int:
        """
        获取包头长度方法
        :return:
        """
        pass

    @abstractmethod
    def Pack(self, msg: IMessage) -> bytes:
        """
        封包方法
        :param msg:
        :return:
        """
        pass

    @abstractmethod
    def Unpack(self, data: bytes) -> IMessage:
        """
        拆包方法
        :param data:
        :return:
        """
        pass
